﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Praxis.Entities;
using System.Data;

namespace Praxis.Repository
{
    public class AlquilerDAO:MasterRepository, IAlquilerDAO
    {

        public List<ALQUILER> GetAlquilerByCriterio(string descripcion)
        {
            var query = from c in Context.ALQUILERs.Include("CLIENTE")
                        select c;

            if (descripcion != null)
            {
                query = query.Where(p=>p.CLIENTE.NombreRazonSocial.ToUpper().Contains(descripcion.ToUpper()));
            }
            return query.ToList();
        }

        public ALQUILER GetAlquilerById(int id)
        {
            var query = from c in Context.ALQUILERs
                        .Include("CLIENTE")
                        .Include("DETALLE_ALQUILER.EQUIPO")
                        .Include("OBRA")
                        where c.Codigo.Equals(id)
                        select c;
            return query.SingleOrDefault();
        }

        public void AddAlquiler(ALQUILER alquiler)
        {
            foreach (var item in alquiler.DETALLE_ALQUILER)
            {
                Context.Entry(item.EQUIPO).State = EntityState.Unchanged;
                Context.Entry(item).State = EntityState.Added;
            }

            Context.Entry(alquiler.CLIENTE).State = EntityState.Unchanged;

            Context.ALQUILERs.Add(alquiler);
            Context.SaveChanges();
        }

        public void UpdateAlquiler(ALQUILER alquiler)
        {
            var estadosDetalle = Context.ChangeTracker.Entries<DETALLE_ALQUILER>();

            Context.Entry(alquiler.CLIENTE).State = EntityState.Unchanged;
            Context.Entry(alquiler).State = EntityState.Modified;

            foreach (var item in alquiler.DETALLE_ALQUILER)
            {
                Context.Entry(item).State = item.CodigoAlquiler == int.Parse("0") ?
                    EntityState.Added : EntityState.Modified; ;
                
                item.CodigoEquipo = item.EQUIPO.Codigo;

                Context.Entry(item.EQUIPO).State = EntityState.Detached;
            }

            Context.SaveChanges();
        }

        public void RemoveAlquoler(int id)
        {
            throw new NotImplementedException();
        }

        public List<ALQUILER> GetAllAlquiler()
        {
            var query = from c in Context.ALQUILERs.Include("CLIENTE")
                        select c;
            return query.ToList();
        }
    }
}
